/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package bab;

/**
 * Heuristique qui choisi de branché sur l'objet qui est fractionné dans la solution non entière
 * de la borne supérieur
 * Et qui selon la valeur
 * @author Florent
 */
public class FractionnerHeuristique implements Heuristique {
	public enum Side {
		//go left if fraction less than 0,5, go right otherwise
		LEFT_IF_LESS,

		//go right if fraction less than 0,5, go left otherwise
		RIGHT_IF_LESS,

		//go always left
		ALWAYS_LEFT,

		//go always right
		ALWAYS_RIGHT
	}

	private Ub ub;
	private Side side;

	public FractionnerHeuristique() {
		this(Side.LEFT_IF_LESS);
	}
	public FractionnerHeuristique(Side side) {
		this.side = side;
	}

	@Override
	public void setUb(Ub ub) {
		this.ub = ub;
	}

	@Override
	public int nextObj() {
		return ub.getObjectFractionne();
	}

	@Override
	public boolean brancherDabordSurVrai() {
		switch(side) {
			case LEFT_IF_LESS :
				return (ub.getFractionVal() <= 0.5);
			case RIGHT_IF_LESS :
				return (ub.getFractionVal() > 0.5);
			case ALWAYS_LEFT :
				return true;
			case ALWAYS_RIGHT :
				return false;
			default:
				return true;
		}
	}
	
}
